// Foundation for Sites by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source

////
/// @group functions
////

$global-font-size: 100% !default; // 全局字体大小

/// 去掉值中的单位（例如：px, em, rem），仅返回数字
///
/// @param {Number} $num - 有单位的数值
///
/// @returns {Number} 没有单位的数字
@function strip-unit($num) {
  @return $num / ($num * 0 + 1);
}

/// 将一个或多个以像素为单位的值转为对应的 rem 单位的值
///
/// @param {Number|List} $values - 要转换的一个或多个值。一定要用空格而不是逗号分隔它们， 如果需要转换以逗号分隔的列表，请将列表括在括号中。
/// @param {Number} $base [null] - 计算 `rem` 时使用的基值。如果您使用的是开箱即用的 Foundation，那么这是 16px。如果此参数为 `null`，则该函数将引用 `$global-font-size` 变量作为基数。
///
/// @returns {List} 转换值列表
@function rem-calc($values, $base: null) {
  $rem-values: ();
  $count: length($values);

  // 如果没有指定基准值，使用全局字体大小
  @if $base == null {
    $base: $global-font-size;
  }

  // 如果基本字体大小时百分比，去掉单位后乘以16px
  // 这是因为在绝大多数浏览器中是100%字体大小就是16px
  @if unit($base) == '%' {
    $base: ($base / 100%) * 16px;
  }

  // 使用 rem 作为基本值可以正确缩放
  @if unit($base) == 'rem' {
    $base: strip-unit($base) * 16px;
  }

  @if $count == 1 {
    @return -zf-to-rem($values, $base);
  }

  @for $i from 1 through $count {
    $rem-values: append($rem-values, -zf-to-rem(nth($values, $i), $base));
  }

  @return $rem-values;
}

// 将无单位，px 或 rem 值转换为 em, 用在断点中
@function -zf-bp-to-em($value) {
  // 像素或无单位值转为 rem
  @if unit($value) == 'px' or unitless($value) {
    $value: rem-calc($value, $base: 16px);
  }

  // 然后转为 em
  @return strip-unit($value) * 1em;
}

/// 将一个 px 值转为对应 rem 值。无论传递任何单位值都假定为像素值。默认情况下，用于计算 rem 值的基本像素值取自 `$global-font-size` 变量
/// @access private
///
/// @param {Number} $value - 要转换的像素值
/// @param {Number} $base [null] - 用于像素转换的基本值
///
/// @returns {Number} rems 中的数字，基于给定值和基本像素值计算。 rem 值按原样返回
@function -zf-to-rem($value, $base: null) {
  // 检查值是否是数字
  @if type-of($value) != 'number' {
    @warn inspect($value) + ' was passed to rem-calc(), which is not a number.';
    @return $value;
  }

  // 如果给定值的单位是 em, 转换为 rem
  @if unit($value) == 'em' {
    $value: strip-unit($value) * 1rem;
  }

  // 如果 $value 的单位不是 rem 或 em，则计算 rem
  @if unit($value) != 'rem' {
    $value: strip-unit($value) / strip-unit($base) * 1rem;
  }

  // 将 0rem 变为 0
  @if $value == 0rem {
    $value: 0;
  }

  @return $value;
}

/// 根据给定的字体大小将像素，百分比，rem 或 em 值转换为无单位值。 非常适合行高
///
/// @param {Number} $value - 转换为无单位行高的值
/// @param {Number} $base - 用于计算行高的字体大小 - 默认为 $global-font-size
///
/// @return {Number} - 无单位值
@function unitless-calc($value, $base: null) {

  // 如果没有指定基准值，使用全局字体大小
  @if $base == null {
    $base: $global-font-size;
  }

  // 首先，将基准值转换为像素值

  @if unit($base) == '%' {
    $base: ($base / 100%) * 16px;
  }

  @if unit($base) == 'rem' {
    $base: strip-unit($base) * 16px;
  }

  @if unit($base) == 'em' {
    $base: strip-unit($base) * 16px;
  }

  // 现在也将给定值转为像素值
  @if unit($value) == '%' {
    $value: ($value / 100%) * $base;
  }

  @if unit($value) == 'rem' {
    $value: strip-unit($value) * $base;
  }

  @if unit($value) == 'em' {
    $value: strip-unit($value) * $base;
  }

  // 'px'
  @if unit($value) == 'px' {
    @return strip-unit($value) / strip-unit($base);
  }

  // 假设大于10的行高在'px'中是绝对的
  @if unitless($value) and ($value > 10) {
    @return $value / strip-unit($base);
  }

  @return $value;
}
